#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include <filesystem>

using namespace std;

string generate_string(int len, bool is_ab = false) {
    string s;
    for(int i = 0; i < len; i++) {
        if(is_ab) {
            s += (rand() % 2 ? 'a' : 'b');
        } else {
            s += 'a' + rand() % 26;
        }
    }
    return s;
}

void generate_test(int test_num, int str_len, int op_count, bool has_rev = true, bool is_ab = false) {
    string filename = "data/string" + to_string(test_num) + ".in";
    freopen(filename.c_str(), "w", stdout);
    
    // 生成初始字符串
    cout << generate_string(str_len, is_ab) << endl;
    
    // 生成操作次数
    cout << op_count << endl;
    
    // 生成操作序列
    for(int i = 0; i < op_count; i++) {
        int op_type = rand() % 3;
        if(!has_rev) op_type = rand() % 2;  // 如果没有rev操作，只生成移动操作
        
        if(op_type == 0) {
            cout << "< " << (rand() % 1000 + 1) << endl;
        } else if(op_type == 1) {
            cout << "> " << (rand() % 1000 + 1) << endl;
        } else {
            cout << "rev" << endl;
        }
    }
}

int main() {
    srand(time(0));
    
    // 创建data目录
    filesystem::create_directory("data");
    
    // 生成20组测试数据
    // 第1-3组：小规模数据
    for(int i = 1; i <= 3; i++) {
        generate_test(i, 1000, 1000);
    }
    
    // 第4组：没有rev操作
    generate_test(4, 1000, 1000, false);
    
    // 第5组：ab字符串
    generate_test(5, 1000, 1000, true, true);
    
    // 第6-10组：中等规模数据
    for(int i = 6; i <= 10; i++) {
        generate_test(i, 1000000, 1000000);
    }
    
    return 0;
} 